#include "TDiccionario.h"
#include <string.h>
#include "common.h"


TDiccionario* TDiccionaro_Crear()
{
    TDiccionario *diccionario;

    diccionario = (TDiccionario*) malloc(sizeof(TDiccionario));

    ls_Crear(&diccionario->ls, sizeof(NodoDiccionario));

    return diccionario;
}


int Tdiccionario_Destruir(TDiccionario* td)
{
     ls_Vaciar(&td->ls);

     if(td)
        free(td);

    return 0;
}

int TDiccionario_colocar(TDiccionario* td, char* clave, char* valor)
{
    NodoDiccionario *itemDiccionario;
    Boolean encontrado = False;

    itemDiccionario = (NodoDiccionario*)malloc (sizeof(NodoDiccionario));

    if (!ls_Vacia(&td->ls))
    {
        ls_MoverCorriente(&td->ls, LS_PRIMERO);

        do
        {
          ls_ElemCorriente(&td->ls, (void*) itemDiccionario);

          if (strcmp( itemDiccionario->clave, clave )==0)
          {
              encontrado = True;
              break;
          }

        }while(ls_MoverCorriente(&td->ls, LS_SIGUIENTE) && !encontrado);
    }

    if (encontrado)
    {
        strcpy(itemDiccionario->valor,valor);
        ls_ModifCorriente(&td->ls, itemDiccionario);
    }
    else
    {
        strcpy(itemDiccionario->clave,clave);
        strcpy(itemDiccionario->valor,valor);

        ls_Insertar(&td->ls, LS_SIGUIENTE, itemDiccionario);
    }

    free(itemDiccionario);

    return 0;
}

int TDiccionario_obtener(TDiccionario* td, char* clave,char* buffer)
{
    NodoDiccionario *itemDiccionario;

    itemDiccionario = (NodoDiccionario*)malloc (sizeof(NodoDiccionario));

    /*Seteo en vacio buffer, asi sino encuentra el dato devuelve un string vacio*/
    buffer[0] = 0;


    if (!ls_Vacia(&td->ls))
    {
        ls_MoverCorriente(&td->ls, LS_PRIMERO);


        do
        {
          ls_ElemCorriente(&td->ls, (void*) itemDiccionario);


          if (strcmp( itemDiccionario->clave, clave )==0)
          {
              strcpy(buffer,itemDiccionario->valor);
              break;
          }
        }while(ls_MoverCorriente(&td->ls, LS_SIGUIENTE));

    }

    free(itemDiccionario);

    return 0;
}

int TDiccionario_sizeDato(TDiccionario* td, char* clave)
{
    char *dato;
    int tamanio = 0;
    dato = malloc(1000);
    TDiccionario_obtener( td,clave,dato);


    tamanio = strlen(dato);

    free(dato);

    return tamanio;


}


int TDiccionario_Cant_Elementos(TDiccionario *td)
{
    int cantidadElementos = 0;

    if (!ls_Vacia(&td->ls))
    {
        ls_MoverCorriente(&td->ls, LS_PRIMERO);

        do
        {
          cantidadElementos++;
        }while(ls_MoverCorriente(&td->ls, LS_SIGUIENTE));

    }

    return cantidadElementos;
}


